package cn.iocoder.yudao.module.system.job.flow;

import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.system.service.config.InfraConfigService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

@Component
@Slf4j
public class FixedTimeJob implements JobHandler {

    @Resource
    private InfraConfigService infraConfigService;

    @Override
    @TenantIgnore
    public String execute(String param) throws Exception {
        String format = DateUtils.format(new Date(), "yyyy-MM-dd HH");
        if(StringUtils.isNotBlank(param)){
            format=param;
        }
        List<Integer> sList=Arrays.asList(1,2);
        for (Integer s : sList) {
            List<Long> tList = infraConfigService.getJobByTimingStatus(s,format);
            int updateNum=0;
            if(CollectionUtils.isNotEmpty(tList)){
                String status="2";
                if(s==2){
                    status="3";
                }
                updateNum=tList.size();
                if(tList.size()>50){
                    List<Long> list=new ArrayList<>();
                    int num=0;
                    for (Long aLong : tList) {
                        list.add(aLong);
                        num++;
                        if(num>=50){
                            infraConfigService.updateJobInfoById(status,list);
                            list=new ArrayList<>();
                            num=0;
                        }
                    }
                    infraConfigService.updateJobInfoById(status,list);
                }else {
                    infraConfigService.updateJobInfoById(status,tList);
                }
            }
            if(s==1){
                log.info("更新定时职位发布个数:"+updateNum);
            }else if(s==2){
                log.info("更新定时职位暂停个数:"+updateNum);
            }
        }
        return String.format("更新定时职位发布暂停个数 %s 个", 0);
    }
}
